/*给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
* 有效字符串需满足：
* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。
*
* 输入：s = "()"
* 输出：true
*
* 输入：s = "(]"
* 输出：false
* */

package newcoder.Stack_3;

import java.util.Stack;

public class Leetcode20 {

    public static void main(String[] args) {

        Leetcode20 obj = new Leetcode20();
        String s = "()";
        System.out.println(obj.isValid(s));
    }

    public boolean isValid(String s){

        Stack<Character> stack = new Stack<Character>();
        if (s == null || s.length() == 0){
            return false;
        }
        if (s.length() % 2 != 0){
            return false;
        }
        for (int i = 0;i < s.length();i++){

            if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '['){
                stack.push(s.charAt(i));
            }
            if (s.charAt(i) == ')'){
                if (stack.isEmpty()){
                    return false;
                }else {
                    if (stack.pop() != '('){
                        return false;
                    }
                }
            }
            if (s.charAt(i) == ']'){
                if (stack.isEmpty()){
                    return false;
                }else {
                    if (stack.pop() != '['){
                        return false;
                    }
                }
            }
            if (s.charAt(i) == '}'){
                if (stack.isEmpty()){
                    return false;
                }else {
                    if (stack.pop() != '{'){
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();
    }
}
